""" 
1. socket创建一个套接字
2. bind绑定ip和port
3. listen使套接字设置为被动模式
4. accept等待客户端的链接
5. recv/send接收发送数据

"""

import socket
#创建一个socket
#参数1 地址族
#               AF_INET ipv4
#               AF_INET6 ipv6
#参数2 socket类型
#               SOCK_STREAM TCP
#               SOCK_DGRAM  UDP
tcp_server_socket = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
#绑定ip和port
#参数1 ip
#参数2 port
#ip 可以写空字符串，代表所有网卡都绑定
tcp_server_socket.bind(("127.0.0.1",7788))

#listen使套接字设置为被动模式
#参数1 等待 链接的最大数量

tcp_server_socket.listen(128)

print("等待客户端的链接...")

#accept等待客户端的链接
#accept等待客户端的链接，（阻塞当前线程，直到有客户端链接）
#服务器会为每个客户端创建一个新的套接字，用于接收和发送数据
tcp_client,addr_client = tcp_server_socket.accept()
print("接收到一个客户端的链接...")
 
while True:
    client_data = tcp_client.recv(2048)
    if client_data:
        print(client_data.decode("gbk"))
        tcp_client.send("消息已收到".encode())
        tcp_server_socket.close()
    else :
        print(f"客户端{addr_client}已断开")
        tcp_client.close()
        break
    # 服务器回复数据
    
# 关闭套接字,只是不再接收新的客户端不影响已有的客户端交互
tcp_server_socket.close()
